package org.excilys.training.ebanking.iservice;

import java.util.List;

import org.excilys.training.ebanking.model.Operation;

public interface IServiceOperation {


	/**
	 * Méthode cherhant à obtenir la  liste des opérations qui n'ont pas été 
	 * effectué par carte pour un compte et un mois donnée
	 * <p>
	 * @param id  numéro de compte
	 * @param mois  mois recherché
	 * @param year année recherchée
	 * 
	 * @return  liste des opérations du mois
	 */
	List<Operation> getAllNoCarteOperationsByMonth(int id, int mois, int year);
	
	/**
	 * Méthode permettant de récupérer la liste des opérations par carte
	 * pour un compte, un mois et uen année donné.
	 * 
	 * @param id numéro de compte
	 * @param mois	mois
	 * @param year	année
	 * 
	 * @return liste d'opérations
	 */
	public List<Operation> getAllCarteOperationByMonth(int id, int mois, int year);
	
	/**
 	 * Méthode permettant d'obtenir la somme des montants des opérations
	 * effectués par carte pour un compte, un mois donnée et	 
	 * <p>
	 * @param id	numero de compte
	 * @param mois	mois
	 * @param year	année
	 * 
	 * @return montants des opérations carte
	 */
	public double getMontantOperationsCarteByMonth(int id, int mois, int year);
	
	/**
	 * Méthode permettant de obtenir une liste operation  avec une taille precise
	 * Pour un compte, un mois, une année et a partir d'un numéro d'opération donnée
	 * <p>
	 * @param id	numéro de compte
	 * @param mois	mois
	 * @param year	année
	 * @param firstoperation numéro de la premiere opérations
	 * 
	 * @return liste d'opérations
	 */
	public List<Operation> getSomeCardOperations(int id, int mois, int year,int firstoperation);

	public List<Operation> getSomeNoCardOperations(int id, int mois, int year,int firstoperation);
	
	public int getNombreOperationsCard(int id, int mois, int year);
	
	public int getNombreOperationsWithoutCard(int id, int mois, int year);

	public int getNombreOperationsByList();
	
	List<Operation> getAllVirementByAccount(int id);
}
